package linkedlist;

import node.SNode;

/**
 * 基于链表实现LRU缓存
 * LRU：最近最少使用
 * @author yutao
 * @since 2020/4/9 6:27 下午
 */
public class LRUBaseLinkedList<T> {

    // 链表：头结点、链表长度和链表容量

    private final static Integer DEFAULT_CAPACITY = 10;

    /**
     * 头结点
     */
    private SNode<T> headNode;

    /**
     * 链表长度
     */
    private Integer length;

    /**
     * 链表容量
     */
    private Integer capacity;

    /**
     * 添加节点
     */
    public void addNode(T data) {

        // 查询该值是否已经存在，存在就插入到头部
        SNode preNode = findPreNode(data);


        // 如果链表长度大于容量，就删除最后一个节点，再插入头结点



    }

    /**
     * 删除preNode结点下个元素
     * @param preNode
     */
    public void deleteElemOptimal(SNode preNode) {

    }

    /**
     * 链表头部插入节点
     * @param data
     */
    public void insertElemAtBegin(T data){

    }

    /**
     * 获取查找到元素的前一个节点
     * @param data
     * @return
     */
    public SNode findPreNode(T data) {

        SNode node = headNode;

        while (node != null) {
            if (node.getNext().getElement().equals(data)) {
                return node;
            }
            node = node.getNext();
        }
        return null;
    }

    /**
     * 删除尾结点
     */
    public void deleteElemAtEnd() {

    }

    /**
     * 打印所有的节点
     */
    private void printAll() {
    }


    public static void main(String[] args) {

        LRUBaseLinkedList list = new LRUBaseLinkedList();
        list.addNode(1);
        list.addNode(2);
        list.addNode(3);
        list.addNode(3);
        list.addNode(2);
        list.addNode(2);
        list.addNode(2);

        list.printAll();
    }




}
